package cn.jstars.datatocloud.common.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import com.google.common.collect.Lists;

/**
 * 日期工具类
 * 
 * @author zhulongxiang
 *
 */
public class DateUtil {

	/**
	 * 获取当前年份
	 * 
	 * @return 当前年份
	 */
	public static int getCurrentYear() {
		Calendar calendar = Calendar.getInstance();
		return calendar.get(Calendar.YEAR);
	}

	/**
	 * 获取今天日期,格式yyyy-MM-dd
	 * 
	 * @return 今天日期
	 */
	public static String getToday() {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		return sdf.format(new Date());
	}

	/**
	 * 获取当前时间，格式yyyy-MM-dd HH:mm:ss
	 * 
	 * @return 当前时间
	 */
	public static String getCurrentTime() {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		return sdf.format(new Date());
	}

	/**
	 * 在原时间上增加秒数
	 * 
	 * @param time
	 *            原时间
	 * @param second
	 *            秒数
	 * @return 新时间
	 */
	public static String addTime(String time, int second) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Calendar cal = Calendar.getInstance();
		try {
			cal.setTime(sdf.parse(time));
			cal.add(Calendar.SECOND, second);
			return sdf.format(cal.getTime());
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 在原时间上增加秒数
	 * 
	 * @param time
	 *            原时间
	 * @param second
	 *            秒数
	 * @return 新时间
	 */
	public static String addDay(String time, int day) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Calendar cal = Calendar.getInstance();
		try {
			cal.setTime(sdf.parse(time));
			cal.add(Calendar.DAY_OF_MONTH, day);
			return sdf.format(cal.getTime());
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 获取一年中所有的日期
	 * <p>
	 * 格式： yyyy-MM-dd
	 * 
	 * @param year
	 *            年份
	 * @return 所有的日期
	 */
	public static List<String> getAllDaysByYear(int year) {
		List<String> allDays = Lists.newArrayList();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Calendar calendar1 = Calendar.getInstance();
		calendar1.set(year, 1, 1);
		calendar1.add(Calendar.MONTH, -1);
		Calendar calendar2 = Calendar.getInstance();
		calendar2.set(year + 1, 1, 1);
		calendar2.add(Calendar.MONTH, -1);
		while (calendar1.before(calendar2)) {
			try {
				allDays.add(sdf.format(calendar1.getTime()));
				int i = 1;
				calendar1.add(Calendar.DAY_OF_MONTH, i++);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return allDays;
	}

	/**
	 * 获取从今天起，前几天的日期，包括今天
	 * <p>
	 * 格式： yyyy-MM-dd
	 * 
	 * @return 近几天的日期集合
	 */
	public static List<String> getNearlyDays(int days) {
		List<String> allDays = Lists.newArrayList();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		String today = getToday();
		allDays.add(today);
		Calendar cal = Calendar.getInstance();
		try {
			cal.setTime(sdf.parse(today));

			for (int i = 0; i < days; i++) {
				cal.add(Calendar.DAY_OF_MONTH, -1);
				allDays.add(sdf.format(cal.getTime()));
			}

		} catch (ParseException e) {
			e.printStackTrace();
		}
		return allDays;
	}
}
